Amazon EKS クラスターエンドポイントのパブリックアクセス無効状態で、Argo CDと別VPCのEKSクラスターを疎通させてみる

Amazon EKS クラスターエンドポイントのパブリックアクセス無効状態で、Argo CDと別VPCのEKSクラスターを疎通させてみる

Clock Icon2024.07.12

AWS Security Hubコントロール「EKS.1」では、Amazon EKSクラスターエンドポイントでパブリックアクセスが有効な状態だとチェックに引っ掛かります。

https://dev.classmethod.jp/articles/securityhub-remediation-eks-1/

Argo CDを利用していて、外部クラスター登録で別VPCのAmazon EKSクラスターを登録している環境では、パブリックを無効にするとどういった影響があるのか気になり調べてみました。

結論

  • Argo CD用Amazon EKSクラスターは、登録対象のAmazon EKSクラスターのクラスターエンドポイントへのアクセスが必要
    • Argo CD外部クラスター登録時に、Amazon EKSクラスターエンドポイントを登録する必要がある
  • Amazon EKSクラスターエンドポイントがプライベートのみの状態では、VPC内から通信する必要がある
  • Argo CD用Amazon EKSクラスターVPCと登録対象のAmazon EKSクラスターVPC間でVPC間通信が必要

環境の用意

以下の手順で、2つのEKSクラスターを用意しました。(Argo CD用のAmazon EKSクラスター・登録対象のAmazon EKSクラスター)

https://dev.classmethod.jp/articles/amazon-eks-argo-cd-eks-blueprints-for-terraform/

クラスター___Elastic_Kubernetes_Service___ap-northeast-1

Clusters___Settings_-_Argo_CD

ワークロード用Amazon EKSクラスターのクラスターエンドポイントのパブリックアクセスを無効にする

ワークロード用Amazon EKSクラスター(spoke-dev)のクラスターエンドポイントのパブリックアクセスを無効にします。

Argo CDからワークロード用Amazon EKSクラスターのアプリケーション(workload-dev)のSyncを実行します。

パブリックアクセスが無効になり、Argo CD用のEKSクラスターからワークロード用のAmazon EKSクラスターのクラスターエンドポイントへアクセスができないため失敗してしまいます。

Applications_Tiles_-_Argo_CD

Argo CD VPCとワークロードVPCを接続して疎通可能にする

クラスターエンドポイントのアクセスがプライベートのみ有効な状況では、クラスターの VPC または接続されたネットワークから疎通することが可能です。

クラスター API サーバーへのすべてのトラフィックは、クラスターの VPC または接続されたネットワーク内から送信する必要があります。

https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/cluster-endpoint.html

今回の場合は、Argo CD VPCとワークロードVPCのVPC間通信が必要です。

VPC間通信の方法はTransit GatewayやVPCピアリングなど色々選択肢があります。

https://docs.aws.amazon.com/ja_jp/whitepapers/latest/aws-vpc-connectivity-options/amazon-vpc-to-amazon-vpc-connectivity-options.html

今回はVPCピアリングでやってみます。

AWSマネジメントコンソール -> ピアリング接続 -> ピアリング接続を作成を選択します。

ピアリング接続を作成します。

  • リクエストVPC: hub-control-plane(Argo CD VPC)
  • アクセプタVPC: spoke-dev(ワークロードVPC)

CreatePeeringConnection___VPC_Console

作成した接続を選択して、アクションからリクエストを承諾を行います。

ステータスがアクティブになっていることを確認します。

スクリーンショット_2024_07_10_17_32

VPCピアリング接続へのルートを、各VPCのEKSサブネットにアタッチされているルートテーブルに追加します。

RouteTables___VPC_Console2

RouteTables___VPC_Console

ワークロード用のAmazon EKSクラスターのセキュリティグループで、Argo CD用のAmazon EKSクラスターからの通信を許可するルールを追加します。

ModifyInboundSecurityGroupRules___VPC_Console

再度、Argo CDからワークロード用のAmaozn EKSにデプロイしたApplicationを確認します。

FailedだったStatusSynkedになっていることを確認できました。

Applications_Tiles_-_Argo_CD

おわりに

クラスターエンドポイントをパブリック無効にすると、登録対象のEKSクラスターがあるVPC内への通信が必要になります。

登録対象のクラスターやVPCが多いと管理のVPC間通信の設定の手間も大きくなりそうです。

パブリックアクセス有効でIPアドレスを制限することも可能です。IPアドレス制限でセキュリティを担保する選択肢もありますので、ご検討ください。

https://dev.classmethod.jp/articles/eks-public-endpoint-access-restriction/

以上、AWS事業本部の佐藤(@chari7311)でした。

参考

https://dev.classmethod.jp/articles/argocd-for-external-cluster/

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.